home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2005 October / PCWOCT05.iso / Software / FromTheMag / XAMPP 1.4.14 / xampp-win32-1.4.14-installer.exe / xampp / php / pear / HTML / Menu / DirectTreeRenderer.php < prev    next >
PHP Script  |  2004-03-24  |  6KB  |  187 lines

  1. <?php
  2. //
  3. // +----------------------------------------------------------------------+
  4. // | PHP Version 4                                                        |
  5. // +----------------------------------------------------------------------+
  6. // | Copyright (c) 1997-2004 The PHP Group                                |
  7. // +----------------------------------------------------------------------+
  8. // | This source file is subject to version 2.0 of the PHP license,       |
  9. // | that is bundled with this package in the file LICENSE, and is        |
  10. // | available at through the world-wide-web at                           |
  11. // | http://www.php.net/license/2_02.txt.                                 |
  12. // | If you did not receive a copy of the PHP license and are unable to   |
  13. // | obtain it through the world-wide-web, please send a note to          |
  14. // | license@php.net so we can mail you a copy immediately.               |
  15. // +----------------------------------------------------------------------+
  16. // | Authors: Alexey Borzov <avb@php.net>                                 |
  17. // |          Uwe Mindrup <uwe@mindrup.de>                                |
  18. // +----------------------------------------------------------------------+
  19. //
  20. // $Id: DirectTreeRenderer.php,v 1.2 2004/01/18 17:35:52 avb Exp $
  21. //
  22.  
  23. require_once 'HTML/Menu/Renderer.php';
  24.  
  25. /**
  26.  * The 'direct' renderer for 'tree' and 'sitemap' menu types where level is
  27.  * represented by tags nesting.
  28.  * 
  29.  * Thanks to Uwe Mindrup for the idea and initial implementation.
  30.  * 
  31.  * @version $Revision: 1.2 $
  32.  * @author  Alexey Borzov <avb@php.net>
  33.  * @author  Uwe Mindrup <uwe@mindrup.de>
  34.  * @access  public
  35.  * @package HTML_Menu
  36.  */
  37. class HTML_Menu_DirectTreeRenderer extends HTML_Menu_Renderer
  38. {
  39.    /**
  40.     * Generated HTML for the menu
  41.     * @var string
  42.     */
  43.     var $_html = '';
  44.  
  45.    /**
  46.     * Generated HTML for the current branches
  47.     * @var string
  48.     */
  49.     var $_levelHtml = array();
  50.  
  51.    /**
  52.     * Generated HTML for the current menu items
  53.     * @var string
  54.     */
  55.     var $_itemHtml = array();
  56.  
  57.    /**
  58.     * The HTML that will wrap around a complete (sub)menu
  59.     * @see setLevelTemplate()
  60.     * @var array
  61.     */
  62.     var $_levelTemplate = array('<ul>', '</ul>');
  63.  
  64.    /**
  65.     * The HTML that will wrap around menu item
  66.     * @see setItemTemplate()
  67.     * @var array
  68.     */
  69.     var $_itemTemplate = array('<li>', '</li>');
  70.  
  71.    /**
  72.     * Templates for menu entries
  73.     * @see setEntryTemplate()
  74.     * @var array
  75.     */
  76.     var $_entryTemplates = array(
  77.         HTML_MENU_ENTRY_INACTIVE    => '<a href="{url}">{title}</a>',
  78.         HTML_MENU_ENTRY_ACTIVE      => '<strong>{title}</strong>',
  79.         HTML_MENU_ENTRY_ACTIVEPATH  => '<a href="{url}"><em>{title}</em></a>'
  80.     );
  81.  
  82.  
  83.     function setMenuType($menuType)
  84.     {
  85.         if ('tree' == $menuType || 'sitemap' == $menuType) {
  86.             $this->_menuType = $menuType;
  87.         } else {
  88.             require_once 'PEAR.php';
  89.             return PEAR::raiseError("HTML_Menu_DirectTreeRenderer: unable to render '$menuType' type menu");
  90.         }
  91.     }
  92.  
  93.  
  94.     function finishLevel($level)
  95.     {
  96.         isset($this->_levelHtml[$level]) or $this->_levelHtml[$level] = '';
  97.         $this->_levelHtml[$level] .= $this->_itemTemplate[0] . $this->_itemHtml[$level] . $this->_itemTemplate[1];
  98.         if (0 < $level) {
  99.             $this->_itemHtml[$level - 1] .= $this->_levelTemplate[0] . $this->_levelHtml[$level] . $this->_levelTemplate[1];
  100.         } else {
  101.             $this->_html = $this->_levelTemplate[0] . $this->_levelHtml[$level] . $this->_levelTemplate[1];
  102.         }
  103.         unset($this->_itemHtml[$level], $this->_levelHtml[$level]);
  104.     }
  105.  
  106.  
  107.     function renderEntry($node, $level, $type)
  108.     {
  109.         if (!empty($this->_itemHtml[$level])) {
  110.             isset($this->_levelHtml[$level]) or $this->_levelHtml[$level] = '';
  111.             $this->_levelHtml[$level] .= $this->_itemTemplate[0] . $this->_itemHtml[$level] . $this->_itemTemplate[1];
  112.         }
  113.         $keys = $values = array();
  114.         foreach ($node as $k => $v) {
  115.             if ('sub' != $k) {
  116.                 $keys[]   = '{' . $k . '}';
  117.                 $values[] = $v;
  118.             }
  119.         }
  120.         $this->_itemHtml[$level] = str_replace($keys, $values, $this->_entryTemplates[$type]);
  121.     }
  122.  
  123.  
  124.    /**
  125.     * returns the HTML generated for the menu
  126.     *
  127.     * @access public
  128.     * @return string
  129.     */
  130.     function toHtml()
  131.     {
  132.         return $this->_html;
  133.     } // end func toHtml
  134.  
  135.  
  136.    /**
  137.     * Sets the item template (HTML that wraps around entries)
  138.     * 
  139.     * @access public
  140.     * @param  string    this will be prepended to the entry HTML
  141.     * @param  string    this will be appended to the entry HTML
  142.     */
  143.     function setItemTemplate($prepend, $append)
  144.     {
  145.         $this->_itemTemplate = array($prepend, $append);
  146.     }
  147.  
  148.  
  149.    /**
  150.     * Sets the level template (HTML that wraps around the submenu)
  151.     * 
  152.     * @access public
  153.     * @param  string    this will be prepended to the submenu HTML
  154.     * @param  string    this will be appended to the submenu HTML
  155.     */
  156.     function setLevelTemplate($prepend, $append)
  157.     {
  158.         $this->_levelTemplate = array($prepend, $append);
  159.     }
  160.  
  161.  
  162.    /**
  163.     * Sets the template for menu entry.
  164.     * 
  165.     * The template should contain at least the {title} placeholder, can also contain
  166.     * {url} and {indent} placeholders, depending on entry type.
  167.     * 
  168.     * @access public
  169.     * @param  mixed     either type (one of HTML_MENU_ENTRY_* constants) or an array 'type' => 'template'
  170.     * @param  string    template for this entry type if $type is not an array
  171.     */
  172.     function setEntryTemplate($type, $template = null)
  173.     {
  174.         if (is_array($type)) {
  175.             // array_merge() will not work here: the keys are numeric
  176.             foreach ($type as $typeId => $typeTemplate) {
  177.                 if (isset($this->_entryTemplates[$typeId])) {
  178.                     $this->_entryTemplates[$typeId] = $typeTemplate;
  179.                 }
  180.             }
  181.         } else {
  182.             $this->_entryTemplates[$type] = $template;
  183.         }
  184.     }
  185. }
  186. ?>
  187.